// 浏览器是通过JS语法，处理带有类型和格式的数据，完成页面标签的构建和生成
// 而 数据 是通过 网络传输方式 从服务器(java)获取的
// 通过网络传输的数据只能以 二进制格式对应的字符串进行传输
// 所以整个过程 ：  java 通过语法将java对应的数据格式和类型转换为文本
//               将转换后的文本通过网络传输给JS
//               JS在将接收的文本转换为JS的数据对应类型和格式
//              JS 处理数据构建页面(渲染页面)
//  网络初始时的对应文本格式关联，目前主流的是两种
//      1. xml  -> 后续java课程讲解
//      2. json -> 是一种具有固定格式的文本信息载体，可以在各语言直接进行直接转换和识别
//                 数据格式关键字 ： {} 表示对象  [] 表示数组或者集合
//                 属性关键字  ：  "" 属性名或字符串包裹符
//                              : 属性名和属性值对应符
//                              , 属性与属性之间的分割符

// 下述代码就是通过js字符串的方式定义的 JSON格式的信息文本
let str = `
    {
        "name":"tom",
        "age":23,
        "arr":[1,2,3,4,5]
    }
`;
// JSON信息格式文本的语法 ，实际上是参考了JS的字面量对象定义规则设计出来的
// 所以JS对象的定义规则和JSON定义规则很相似，也可相互转换
// W3C 在JSON信息格式语法出现之后，将JS的字面量定义的代码方式分为了两种
// 第一种：JS对象【属性名的定义不限制所使用的标识符是 ‘ ” 】
let obj1 = {
    name:"tom",
    info:'info',
    msg:`msg`,
    age:23
}
let obj2 = {
    'name':'tom',
    'age':23
}
// 第二种：JS的JSON对象【只能使用“”定义属性名和属性的字符串取值】
let obj3 = {
    "name":"tom",
    "age":23
}

// JS 提供了内置的JSON操作方法，方法被定义在全局对象JSON中
//      + JSON.stringify(JS-Object) 将JS对象转换为标准JSON字符串
console.log( JSON.stringify(obj1) )
console.log( JSON.stringify(obj2) )
console.log( JSON.stringify(obj3) )
//      + JSON.stringify(JS-Object,replace,space) 将JS对象转换为标准JSON字符串,并以固定格式输出
console.log( JSON.stringify(obj1,"\n","\t") ) // 测试

let objStr = '{"name":"tom","info":"info","msg":"msg","age":23}';
//      + JSON.parse(JSON-string) 将符合JSON格式的字符串转换为JS对象
let obj = JSON.parse(objStr)
console.log( obj )

// 因为下述字符串的name属性未使用标准JSON格式,所以强制转换会提示错误
let objStr1 = `{'name':"tom","info":"info","msg":"msg","age":23}`;
// SyntaxError: Expected property name or '}' in JSON at position 1 (line 1 column 2)
// let tempObj = JSON.parse(objStr1)

// 上述objStr1字符串如果需要转换为js对象,只能使用JS内置方法 eval() 进行文本JS语法执行操作
// eval 用于执行以文本形式记录的JS代码
let jsCodeStr = `for (let i = 0; i < 10; i++) {
    console.log(i)
}`;
console.log(jsCodeStr);
eval( jsCodeStr )

// 通过eval转换非标准格式对象字符串
// eval( objStr1 ) // SyntaxError: Unexpected token ':'
let tempObj2 = eval( "("+objStr1+")" )
console.log(tempObj2)







